//
// Created by Jisam on 28/09/2024 12:09 AM.
// Solution of  三位出题人
#include <bits/stdc++.h>

using namespace std;
using i64 = long long;
using u64 = unsigned long long;

const int mod = 1e9 + 7;

i64 ksm(i64 a, i64 b) {
    i64 res = 1;
    while (b) {
        if (b & 1) {
            res = res * a % mod;
        }
        a = a * a % mod;
        b >>= 1;
    }

    return res;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int t = 1;
    cin >> t;
    while (t--) {
        // 读取输入并计算组合数学问题的结果
        // 输入两个整数n表示题目数量和m表示人数，计算2^m的n次幂模某个大数的结果
        int n, m;
        cin >> n >> m;

        // 根据组合数学公式，计算2的m次方减2，加上模数以确保非负，然后再次取模得到最终结果，并将其的n次方计算后输出
        cout << ksm((ksm(2, m) - 2 + mod) % mod, n) << "\n";
    }
    return 0;
}